import 'package:flutter/material.dart';

/*
* Flutter三棵树：
* 1.Widget Tree：我们编写代码使用该数，不断调用build方法重新渲染，树结构不稳定，一旦widget改变依赖他的widget都会重建。
*     每次直接解析该树，性能消耗严重，最终转为RenderObject
*
* 2.RenderObject Tree：Flutter引擎直接使用该树渲染，节点为RenderObject
*   不是所有Widget都会映射为RenderObject，和Widget不是一一对象关系，例如StatelessWidget等只是个组合Widget
*
* 3.Element Tree：类似虚拟DOM是Widget实例，Widget树转为该树最终反映到RenderObject，
*   每次Widget发生改变与Element比对，只将变化的部分通知RenderObject改变，
*   使用最小的开销重新渲染界面
*
*
* Container、Text(继承关系：Text->StatelessWidget->Widget)等是组件Widget只是把其他Widget组装不会生成RenderObject，
* 而Padding、Row(继承关系：Padding->SingleChildRenderObjectWidget->RenderObjectWidget->Widget)等是渲染Widget，最终生成RenderObject
* RenderObjectWidget中核心方法createRenderObject,子类实现该方法。
* 所有的Widget都会创建对应的不同的Element对象，在ComponentElementFlutter框架会调用Element的mount->firstBuild->rebuild->performBuild->build->widget.build,
* 可以看出最终调用我们自己的Widget的build方法
*
* StatefulWidget：对应的StatefulElement构造方法中调用widget.createState(),由Element持有管理
*/
void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '渲染总结',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        splashColor: Colors.transparent,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('渲染总结'),
        ),
        body: HomePage(),
      ),
    );
  }
}

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container();
  }
}
